/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import bentity.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author renzo
 */
public class daoHelper {
    public static final int TRANSACCION_EXITOSA = 1;
    public static final int TRANSACCION_FALLIDA = 0;
    
    public static Connection dameConexion(){
//        ESTE MÉTODO DEVUELVE UNA CONEXION A LA BASE DE DATOS POSTGRES.
//        SI OCURRE ALGUN ERROR, EL MÉTODO DEVUELVE NULL.
        try{
            Class.forName("org.postgresql.Driver");
        }
        catch(ClassNotFoundException e){
            e.printStackTrace();
            return null;
        }
        String connectionString = "jdbc:postgresql://quilla.lab.inf.pucp.edu.pe:1053/postgres";
        String username = "postgres";
        String password = "cocina";
        try{
            return DriverManager.getConnection(connectionString,username,password);
        } catch(SQLException e){
            e.printStackTrace();
            return null;
        }
    }

    public static void cerrarConexion(Connection conn){
//        ESTE MÉTODO CIERRA LA CONEXIÓN A LA BASE DE DATOS POSTGRE
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static ArrayList<beCombo> DatosCombo(String TipoCombo){
        Connection conn= daoHelper.dameConexion();
        ArrayList<beCombo> lista =new ArrayList<beCombo>();
        try{
           PreparedStatement ps = conn.prepareStatement("SELECT * FROM DATOS_COMBO WHERE NOMBRE_COMBO= ?");
            ps.setString(1, TipoCombo);
            ResultSet rs = ps.executeQuery();
            //System.out.println("IDUSUARIO\tNOMBRE\tPASSWORD\tESTADO\tCARGO");
            
            while(rs.next()){
                beCombo dato=new beCombo();
                dato.setId_dato(rs.getInt("ID_DATO"));
                dato.setNom_dato(rs.getString("NOMBRE_DATO"));
                dato.setNom_combo(rs.getString("NOMBRE_COMBO"));
                lista.add(dato);
            }
        }catch(SQLException ex){
            System.out.println(ex);
        }

        return lista;
    }

    public int dameIdEstado(String nombreDato,String nombreCombo) throws SQLException{
        int idEstado=-1;
        Connection conn = daoHelper.dameConexion();
        String sql = "SELECT CMB.ID_DATO FROM DATOS_COMBO CMB WHERE CMB.NOMBRE_DATO=? AND CMB.NOMBRE_COMBO=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,nombreDato);
        ps.setString(2,nombreCombo);
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
            idEstado = rs.getInt(1);
        }
        rs.close();
        ps.close();
        conn.close();
        return idEstado;
    }

    public String dameNombreEstado(int idDato,String nombreCombo) throws SQLException{
        String nombreEstado="";
        Connection conn = daoHelper.dameConexion();
        String sql = "SELECT CMB.NOMBRE_DATO FROM DATOS_COMBO CMB WHERE CMB.ID_DATO=? AND CMB.NOMBRE_COMBO=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1,idDato);
        ps.setString(2,nombreCombo);
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
            nombreEstado = rs.getString(1);
        }
        rs.close();
        ps.close();
        conn.close();
        return nombreEstado;
    }

    public static int getNextId(String tabla, String columna) throws Exception{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int nextId = 1;
        String sql = "SELECT MAX("+columna+") FROM "+tabla;
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        rs = ps.executeQuery();
        if (rs.next()){
            nextId = rs.getInt(1);
            nextId++;
        }
        rs.close();
        ps.close();
        conn.close();
        return nextId;
    }
}
